#pragma once
#include<iostream>
#include<stdlib.h>
#define MAX_SIZE 100
using namespace std;
//创建结构体表示顺序表
typedef struct {
	int* elems;//顺序表的元素地址
	int length;//顺序表的长度
	int size;//顺序表的总的存储位置
}SeqList;
class SeqList1 {

public:
	SeqList1() {};//构造函数初始化


	bool getList(SeqList& L) {//创建一个空的顺序表
		L.elems = new int[MAX_SIZE];//为顺序表分配MAX_SIZE个空间

		if (!L.elems) { return false; }//如果顺序表为空，则分配失败

		L.length = 0;//表长
		L.size = MAX_SIZE;//表的总长
		return true;
	};

	bool add_List(SeqList& L, int e) {//添加数据，e表示要添加的元素个数
		if (L.length == L.size) { return false; }
		cout << endl;
		for (int i = 0; i < e; i++) {//循环输入e个数据
			cout<<"请输入你想要添加的"<<i+1<<"个信息"<<endl;
			cin >> L.elems[L.length];
			L.length++;
		}
		return true;
	}

	bool insert_List(SeqList& L, int i, int e) {//插入数据，i表示插入的位置，e表示插入的元素
		if (i<0 || i>L.size)   return false;//防止插入位置非法
		if (L.length == L.size)   return false;//判断空间是否已满


		for (int j = L.length - 1; j >= i; j--)//元素后移
		{
			L.elems[j + 1] = L.elems[j];
		}

		L.elems[i] = e;//将e元素插入到i位置
		L.length++;
		return true;
	}


	bool delete_List(SeqList& L, int i) {//删除，i表示删除元素的位置
		if (i<0 || i>L.size)   return false;
		if (i == L.length - 1) {//判断要删除的元素是不是最后一个，若是直接长度-1
			L.length--;
			return true;
		}
		//判断不是最后一个
		for (int j = i; j < L.length - 1; j++) {//循环查找要删除元素的位置
			L.elems[j] = L.elems[j + 1];//元素前移
		}
		L.length--;
		return true;
	}

	void over_List(SeqList& L) {//顺序表的销毁
		if (L.elems) delete L.elems;//释放空间
		L.length = 0;
		L.size = 0;
		cout << "顺序表销毁成功" << endl;
	}
	void print_List(SeqList& p) {
		for (int i = 0; i < p.length; i++)
		{
			cout << "顺序表的第" << i << "个元素为" << p.elems[i] << endl;
		}
		cout << endl;
		cout << "顺序表的长度为" << p.length <<endl;
		cout << "顺序表的大小为" << p.size << endl;
	}
};